package dao;

import hbt.HibernateUtil;

import java.util.ArrayList;
import java.util.List;

import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;

import entidades.Accidente;
import entidades.Obrero;
import entidades.Proyecto;


public class AccidenteDAO {
	
	private static AccidenteDAO instancia = null;
	private static SessionFactory sf = null;
	
	public static AccidenteDAO getInstancia(){
		if(instancia == null){
			sf = HibernateUtil.getSessionFactory();
			instancia = new AccidenteDAO();
		} 
		return instancia;
	}
	
	public void guardarUnAccidente(Accidente accidente){
		Session session = sf.openSession();
		session.beginTransaction();
		session.saveOrUpdate(accidente); 
		session.getTransaction().commit();
		session.close();
	}
	
	@SuppressWarnings("unchecked")
	public List<Accidente> obtenerListaAccidentes() throws Exception {
		try {
			Session session = sf.openSession();
			Query q = session.createQuery("from Accidente");
			List<Accidente> listaAccidentes = new ArrayList<Accidente>(q.list());
			session.close();
			return listaAccidentes;
		} catch (Exception e) {
			throw e;
		}
	}

	@SuppressWarnings("unchecked")
	public int obtenerCantAccidentesPorObrero(Obrero obreroSeleccionado, Proyecto proyectoSeleccionado) throws Exception {
		try {
			int cantAccidentes;
			Session session = sf.openSession();
			Query q = session.createQuery("from Accidente where ID_OBRERO = "+obreroSeleccionado.getIdObrero()+" and ID_PROYECTO = "+proyectoSeleccionado.getIdProyecto());
			List<Accidente> listaAccidentes = new ArrayList<Accidente>(q.list());
			session.close();
			cantAccidentes = listaAccidentes.size();
			return cantAccidentes;
		} catch (Exception e) {
			throw e;
		}
	}
	
}
